“Multiprocessing” refers to a computing system including multiple processors. By having more than one processor in the computing system, the system is capable of working more quickly than a comparable single processor system, whether the processors in the multiprocessor system are working collectively on a single program or each executing a different program. A node connects the processors to each other and to memory. The node also tracks which processors have accessed which addresses in the memory, so that conflicts are avoided.
But as the number of processors increases, the complexity of managing the processors increases exponentially. And since the node is a common bus for all of the processors, as the number of processors connected to each node increases, the traffic on the node increases. Eventually, the traffic reaches a point at which processors are idling, waiting for bus access, which negates the advantage of increasing the number of processors.
Coherent transactions are another problem. A coherent transaction is a transaction that may not be performed without making sure that the transaction does not affect another processor. For example, if data may not be cached anywhere, then transactions that read memory values are non-coherent. But if data may be cached, before a processor may read a value from memory, it must make sure that no other processor has cached the memory value (or worse, has modified the data value but not yet written the value back to memory). Systems that mandate that all transactions be non-coherent are simpler in design, but less efficient. But designing a system that allows for coherent transactions is more complicated. And making transactions coherent is even more difficult where the processors do not all communicate with each other across a shared bus.
A need remains for a way to scale the number of processors in a multiprocessor system that addresses these and other problems associated with the prior art.